package com.myapp;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

@Configuration
public class DataSourceConfig {

  /**
   * @Profile中包含了@Conditional注解，@Conditional注解的值为ProfileCondition.class，实现了Condition接口
   * 其判断逻辑为如下
   * 	public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
   * 		if (context.getEnvironment() != null) {
   * 	        //获取方法上类型为Profile的注解
   * 			MultiValueMap<String, Object> attrs = metadata.getAllAnnotationAttributes(Profile.class.getName());
   * 		    //如果没有Profile的注解则返回true
   * 			if (attrs != null) {
   * 		        //获取Profile中的value值,值为数组，如值可配置为（{"dev","prod"})）
   * 				for (Object value : attrs.get("value")) {
   * 			        //判断环境中激活的配置是否存在于Profile中的value数组值中
   * 					if (context.getEnvironment().acceptsProfiles(((String[]) value))) {
   * 						return true;
   * 					}
   * 				}
   * 				return false;
   * 			}
   * 		}
   * 		return true;
   * 	}
   * @return
   */
  @Bean()
  @Profile("dev")
  public DataSource dataSource1() {
    return new DataSource("dev");
  }

  @Bean
  @Profile("prod")
  public DataSource dataSource2() {
    return new DataSource("2");
  }

}